package examples

import (
	"context"
	"fmt"
	"log"

	"gitee.com/liumou_site/glpm"
)

func demo2() {
	fmt.Println("=== GLPM 基本使用示例 ===")

	// 1. 使用在线包管理器
	fmt.Println("\n1. 使用在线包管理器")
	onlineManager, err := glpm.NewOnlinePackageManager(nil)
	if err != nil {
		log.Printf("创建在线包管理器失败: %v", err)
	} else {
		if onlineManager.IsManagerAvailable() {
			fmt.Printf("检测到在线包管理器: %s\n", onlineManager.GetManagerName())

			// 更新包列表
			err = onlineManager.Update(context.Background())
			if err != nil {
				log.Printf("更新失败: %v", err)
			} else {
				fmt.Println("包列表更新成功")
			}

			// 搜索包
			packages, err := onlineManager.Search(context.Background(), "python")
			if err != nil {
				log.Printf("搜索失败: %v", err)
			} else {
				fmt.Printf("找到 %d 个相关包\n", len(packages))
				if len(packages) > 0 {
					fmt.Printf("第一个包: %s - %s\n", packages[0].Name, packages[0].Description)
				}
			}

			// 列出已安装的包
			installed, err := onlineManager.ListInstalled(context.Background())
			if err != nil {
				log.Printf("列出已安装包失败: %v", err)
			} else {
				fmt.Printf("已安装 %d 个包\n", len(installed))
			}
		} else {
			fmt.Println("未检测到可用的在线包管理器")
		}
	}

	// 2. 使用离线包管理器
	fmt.Println("\n2. 使用离线包管理器")
	offlineManager, err := glpm.NewOfflinePackageManager(nil)
	if err != nil {
		log.Printf("创建离线包管理器失败: %v", err)
	} else {
		if offlineManager.IsManagerAvailable() {
			fmt.Printf("检测到离线包管理器: %s\n", offlineManager.GetManagerName())

			// 搜索包
			packages, err := offlineManager.Search(context.Background(), "python")
			if err != nil {
				log.Printf("搜索失败: %v", err)
			} else {
				fmt.Printf("找到 %d 个相关包\n", len(packages))
			}

			// 列出已安装的包
			installed, err := offlineManager.ListInstalled(context.Background())
			if err != nil {
				log.Printf("列出已安装包失败: %v", err)
			} else {
				fmt.Printf("已安装 %d 个包\n", len(installed))
			}
		} else {
			fmt.Println("未检测到可用的离线包管理器")
		}
	}

	// 3. 列出可用的包管理器
	fmt.Println("\n3. 列出可用的包管理器")
	available := glpm.ListAvailableManagers()
	fmt.Printf("可用的包管理器: %v\n", available)

	// 4. 检测Linux发行版
	fmt.Println("\n4. 检测Linux发行版")
	distro := glpm.DetectLinuxDistribution()
	fmt.Printf("检测到Linux发行版: %s\n", distro)

	// 5. 获取推荐的包管理器
	fmt.Println("\n5. 获取推荐的包管理器")
	recommended := glpm.GetRecommendedManager()
	fmt.Printf("推荐的包管理器: %s\n", recommended)

	fmt.Println("\n=== 示例执行完成 ===")
}
